package com.longtop.sp.mapdao;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * LOB字段处理，用于读、写数据库的LOB字段
 * 
 */

public interface Lob {

	/**
	 * 写入Blob字段
	 * 
	 * @param rs
	 *            已经定位到要写入数据的ResultSet记录
	 * @param fieldName
	 *            Blob字段名
	 * @param o
	 *            将要写入的数据，可以使用byte[]或InputStream对象。不可以为null，否则将抛出SQLException异常。
	 * @throws SQLException
	 * @throws IOException
	 */
	public void writeBLOB(ResultSet rs, String fieldName, Object o)
			throws SQLException, IOException;

	public void writeBLOB(ResultSet rs, int idx, Object o) throws SQLException,
			IOException;

	/**
	 * 
	 * @param rs
	 *            已经定位到要读取数据的ResultSet记录
	 * @param fieldName
	 *            Blob字段名
	 * @return byte[] 从Blob字段中读取的数据，可能为null
	 * @throws SQLException
	 * @throws IOException
	 */
	public byte[] readBLOB(ResultSet rs, String fieldName) throws SQLException,
			IOException;

	public byte[] readBLOB(ResultSet rs, int idx) throws SQLException,
			IOException;

	/**
	 * 向CLOB字段中写数据
	 * 
	 * @param rs
	 *            已经定位到要写数据的那一行
	 * @param fieldName
	 *            字段名
	 * @param o
	 *            将要写入的数据，可以使用String、StringBuffer、char[]或Reader对象。不可以为null，否则将抛出SQLException异常。
	 * @throws SQLException
	 * @throws IOException
	 */
	public void writeCLOB(ResultSet rs, String fieldName, Object o)
			throws SQLException, IOException;

	public void writeCLOB(ResultSet rs, int idx, Object o) throws SQLException,
			IOException;

	/**
	 * 从CLOB字段中读取数据
	 * 
	 * @param rs
	 *            已经定位到要读取数据的ResultSet记录
	 * @param fieldName
	 *            字段名
	 * @return char[] 从Blob字段中读取的数据，可能为null
	 * @throws SQLException
	 * @throws IOException
	 */
	public char[] readCLOB(ResultSet rs, String fieldName) throws SQLException,
			IOException;

	public char[] readCLOB(ResultSet rs, int idx) throws SQLException,
			IOException;
}